def load_font_styles():
    """
    定义不同字体样式的字符映射
    每个字符由5行组成，每行是一个字符串
    """
    font_styles = {
        'default': {
            'A': ['  *  ', ' * * ', '*****', ' * * ', ' * * '],
            'B': ['**** ', ' *  *', '**** ', ' *  *', '**** '],
            'C': [' ****', ' *   ', ' *   ', ' *   ', ' ****'],
            'D': ['**** ', ' *  *', ' *  *', ' *  *', '**** '],
            'E': ['*****', ' *   ', '**** ', ' *   ', '*****'],
            'F': ['*****', ' *   ', '**** ', ' *   ', ' *   '],
            'G': [' ****', ' *   ', ' * ***', ' *  *', ' ****'],
            'H': [' * * ', ' * * ', '*****', ' * * ', ' * * '],
            'I': ['*****', '  *  ', '  *  ', '  *  ', '*****'],
            'J': ['   **', '    *', '    *', ' *  *', ' *** '],
            'K': [' *  *', ' * * ', ' **  ', ' * * ', ' *  *'],
            'L': [' *   ', ' *   ', ' *   ', ' *   ', '*****'],
            'M': [' * * ', '** **', '*****', '** **', '** **'],
            'N': [' * * ', '** * ', '***  ', '** * ', ' * * '],
            'O': ['  ** ', ' *  *', ' *  *', ' *  *', '  ** '],
            'P': ['**** ', ' *  *', '**** ', ' *   ', ' *   '],
            'Q': ['  ** ', ' *  *', ' *  *', ' * * ', '  ** '],
            'R': ['**** ', ' *  *', '**** ', ' * * ', ' *  *'],
            'S': [' ****', ' *   ', '  ** ', '    *', '**** '],
            'T': ['*****', '  *  ', '  *  ', '  *  ', '  *  '],
            'U': [' * * ', ' * * ', ' * * ', ' * * ', '  *  '],
            'V': [' * * ', ' * * ', ' * * ', '  *  ', '  *  '],
            'W': ['** **', '** **', '*****', ' * * ', ' * * '],
            'X': [' * * ', ' * * ', '  *  ', ' * * ', ' * * '],
            'Y': [' * * ', ' * * ', '  *  ', '  *  ', '  *  '],
            'Z': ['*****', '   * ', '  *  ', ' *   ', '*****'],
            ' ': ['     ', '     ', '     ', '     ', '     '],
            '0': ['  ** ', ' *  *', ' *  *', ' *  *', '  ** '],
            '1': ['  *  ', ' **  ', '  *  ', '  *  ', '*****'],
            '2': [' ****', '    *', '  ** ', ' *   ', '*****'],
            '3': [' ****', '    *', '  ** ', '    *', ' ****'],
            '4': [' *  *', ' *  *', '*****', '    *', '    *'],
            '5': ['*****', ' *   ', '**** ', '    *', ' ****'],
            '6': ['  ** ', ' *   ', '**** ', ' *  *', '  ** '],
            '7': ['*****', '    *', '   * ', '  *  ', '  *  '],
            '8': ['  ** ', ' *  *', '  ** ', ' *  *', '  ** '],
            '9': ['  ** ', ' *  *', '  ***', '    *', '  ** ']
        },
        'bold': {
            'A': [' *** ', '*****', '*****', '*****', '***  '],
            'B': ['**** ', '*****', '**** ', '*****', '**** '],
            'C': [' ****', '*****', '*****', '*****', ' ****'],
            'D': ['**** ', '*****', '*****', '*****', '**** '],
            'E': ['*****', '*****', '**** ', '*****', '*****'],
            'F': ['*****', '*****', '**** ', '*****', '*****'],
            'G': [' ****', '*****', '**** ', '*****', ' ****'],
            'H': ['*****', '*****', '*****', '*****', '*****'],
            'I': ['*****', '*****', '*****', '*****', '*****'],
            'J': ['   **', '   **', '   **', '**** ', '**** '],
            'K': ['*****', '**** ', '**** ', '**** ', '*****'],
            'L': ['*****', '*****', '*****', '*****', '*****'],
            'M': ['*****', '*****', '*****', '*****', '*****'],
            'N': ['*****', '*****', '*****', '*****', '*****'],
            'O': [' ****', '*****', '*****', '*****', ' ****'],
            'P': ['**** ', '*****', '**** ', '*****', '*****'],
            'Q': [' ****', '*****', '*****', '*****', ' ****'],
            'R': ['**** ', '*****', '**** ', '**** ', '*****'],
            'S': [' ****', '*****', ' ****', '*****', ' ****'],
            'T': ['*****', '*****', '*****', '*****', '*****'],
            'U': ['*****', '*****', '*****', '*****', ' ****'],
            'V': ['*****', '*****', '*****', '**** ', '**** '],
            'W': ['*****', '*****', '*****', '*****', '*****'],
            'X': ['*****', '**** ', '**** ', '**** ', '*****'],
            'Y': ['*****', '*****', '**** ', '**** ', '**** '],
            'Z': ['*****', '**** ', '**** ', '**** ', '*****'],
            ' ': ['     ', '     ', '     ', '     ', '     ']
        },
        'hollow': {
            'A': ['  *  ', ' * * ', '*****', ' * * ', ' * * '],
            'B': ['**** ', ' *  *', '**** ', ' *  *', '**** '],
            'C': [' ****', ' *   ', ' *   ', ' *   ', ' ****'],
            'D': ['**** ', ' *  *', ' *  *', ' *  *', '**** '],
            'E': ['*****', ' *   ', '**** ', ' *   ', '*****'],
            'F': ['*****', ' *   ', '**** ', ' *   ', ' *   '],
            'G': [' ****', ' *   ', ' * ***', ' *  *', ' ****'],
            'H': [' * * ', ' * * ', '*****', ' * * ', ' * * '],
            'I': ['*****', '  *  ', '  *  ', '  *  ', '*****'],
            'J': ['   **', '    *', '    *', ' *  *', ' *** '],
            'K': [' *  *', ' * * ', ' **  ', ' * * ', ' *  *'],
            'L': [' *   ', ' *   ', ' *   ', ' *   ', '*****'],
            'M': [' * * ', '** **', '*****', '** **', '** **'],
            'N': [' * * ', '** * ', '***  ', '** * ', ' * * '],
            'O': ['  ** ', ' *  *', ' *  *', ' *  *', '  ** '],
            'P': ['**** ', ' *  *', '**** ', ' *   ', ' *   '],
            'Q': ['  ** ', ' *  *', ' *  *', ' * * ', '  ** '],
            'R': ['**** ', ' *  *', '**** ', ' * * ', ' *  *'],
            'S': [' ****', ' *   ', '  ** ', '    *', '**** '],
            'T': ['*****', '  *  ', '  *  ', '  *  ', '  *  '],
            'U': [' * * ', ' * * ', ' * * ', ' * * ', '  *  '],
            'V': [' * * ', ' * * ', ' * * ', '  *  ', '  *  '],
            'W': ['** **', '** **', '*****', ' * * ', ' * * '],
            'X': [' * * ', ' * * ', '  *  ', ' * * ', ' * * '],
            'Y': [' * * ', ' * * ', '  *  ', '  *  ', '  *  '],
            'Z': ['*****', '   * ', '  *  ', ' *   ', '*****'],
            ' ': ['     ', '     ', '     ', '     ', '     ']
        },
        'shadow': {
            'A': ['      ', '      ', '  *  ', ' * * ', '*****', ' * * ', ' * * '],
            'B': ['      ', '      ', '**** ', ' *  *', '**** ', ' *  *', '**** '],
            'C': ['      ', '      ', ' ****', ' *   ', ' *   ', ' *   ', ' ****'],
            'D': ['      ', '      ', '**** ', ' *  *', ' *  *', ' *  *', '**** '],
            'E': ['      ', '      ', '*****', ' *   ', '**** ', ' *   ', '*****'],
            'F': ['      ', '      ', '*****', ' *   ', '**** ', ' *   ', ' *   '],
            'G': ['      ', '      ', ' ****', ' *   ', ' * ***', ' *  *', ' ****'],
            'H': ['      ', '      ', ' * * ', ' * * ', '*****', ' * * ', ' * * '],
            'I': ['      ', '      ', '*****', '  *  ', '  *  ', '  *  ', '*****'],
            'J': ['      ', '      ', '   **', '    *', '    *', ' *  *', ' *** '],
            'K': ['      ', '      ', ' *  *', ' * * ', ' **  ', ' * * ', ' *  *'],
            'L': ['      ', '      ', ' *   ', ' *   ', ' *   ', ' *   ', '*****'],
            'M': ['      ', '      ', ' * * ', '** **', '*****', '** **', '** **'],
            'N': ['      ', '      ', ' * * ', '** * ', '***  ', '** * ', ' * * '],
            'O': ['      ', '      ', '  ** ', ' *  *', ' *  *', ' *  *', '  ** '],
            'P': ['      ', '      ', '**** ', ' *  *', '**** ', ' *   ', ' *   '],
            'Q': ['      ', '      ', '  ** ', ' *  *', ' *  *', ' * * ', '  ** '],
            'R': ['      ', '      ', '**** ', ' *  *', '**** ', ' * * ', ' *  *'],
            'S': ['      ', '      ', ' ****', ' *   ', '  ** ', '    *', '**** '],
            'T': ['      ', '      ', '*****', '  *  ', '  *  ', '  *  ', '  *  '],
            'U': ['      ', '      ', ' * * ', ' * * ', ' * * ', ' * * ', '  *  '],
            'V': ['      ', '      ', ' * * ', ' * * ', ' * * ', '  *  ', '  *  '],
            'W': ['      ', '      ', '** **', '** **', '*****', ' * * ', ' * * '],
            'X': ['      ', '      ', ' * * ', ' * * ', '  *  ', ' * * ', ' * * '],
            'Y': ['      ', '      ', ' * * ', ' * * ', '  *  ', '  *  ', '  *  '],
            'Z': ['      ', '      ', '*****', '   * ', '  *  ', ' *   ', '*****'],
            ' ': ['      ', '      ', '     ', '     ', '     ', '     ', '     ']
        }
    }
    
    # 为阴影字体添加阴影效果（在每个字符后面添加一个空格和一个点）
    for char, lines in font_styles['shadow'].items():
        if char != ' ':
            new_lines = []
            for line in lines:
                # 在每行的每个字符后面添加一个点作为阴影
                shadow_line = ''.join([c + '.' if c == '*' else '  ' for c in line])
                new_lines.append(shadow_line)
            font_styles['shadow'][char] = new_lines
    
    return font_styles

def print_name_art(name, font_style='default'):
    """
    使用指定的字体样式打印名字的星号艺术字
    
    参数:
    name (str): 要打印的名字
    font_style (str): 字体样式，可选值为 'default', 'bold', 'hollow', 'shadow'
    """
    font_styles = load_font_styles()
    
    # 检查字体样式是否存在
    if font_style not in font_styles:
        print(f"警告: 字体样式 '{font_style}' 不存在，将使用默认样式")
        font_style = 'default'
    
    # 获取当前字体样式的字符高度
    char_height = len(next(iter(font_styles[font_style].values())))
    
    # 逐行打印名字
    for i in range(char_height):
        line = ''
        for char in name.upper():
            # 如果字符不在字体映射中，使用空格代替
            if char in font_styles[font_style]:
                line += font_styles[font_style][char][i] + '  '  # 添加字符间距
            else:
                line += '     ' + '  '  # 5个空格加上间距
        print(line)

def main():
    """
    主函数，处理用户输入并打印星号艺术字
    """
    print("欢迎使用星号艺术字生成器！")
    print("=" * 40)
    
    while True:
        # 获取用户输入的名字
        name = input("\n请输入你想打印的名字 (输入 'q' 退出): ")
        
        # 检查是否退出
        if name.lower() == 'q':
            print("感谢使用，再见！")
            break
        
        # 显示可用的字体样式
        print("\n可用的字体样式:")
        font_styles = load_font_styles()
        for i, style in enumerate(font_styles.keys(), 1):
            print(f"{i}. {style}")
        
        # 获取用户选择的字体样式
        while True:
            try:
                choice = input(f"\n请选择字体样式 (1-{len(font_styles)}): ")
                if choice.lower() == 'q':
                    print("感谢使用，再见！")
                    return
                choice = int(choice)
                if 1 <= choice <= len(font_styles):
                    selected_style = list(font_styles.keys())[choice - 1]
                    break
                print(f"请输入 1 到 {len(font_styles)} 之间的数字")
            except ValueError:
                print("请输入有效的数字")
        
        # 打印星号艺术字
        print("\n" + "=" * 60)
        print_name_art(name, selected_style)
        print("=" * 60 + "\n")

if __name__ == "__main__":
    main()


